package com.wgy.day38方法引用.通过对象名引用成员方法;

import com.wgy.day38方法引用.通过对象名引用成员方法.Printable;

/*通过对象名引用成员方法:
 * 使用前提是对象名已经存在的,成员方法也是已经存在的
 * 就可以使用对象名引用成员方法
 * */
public class Demo01ObjectMethodReference {
    //定义一个方法,方法的参数传递Printable接口
    public static void printString(Printable p) {
        p.print("Hello");
    }

    public static void main(String[] args) {
        //调用方法printString方法,方法的参数是Printable是一个函数式接口,所以可以传递Lambda表达式
        printString((String s) -> {
            //创建MethodRerObject对象
            MethodRerObject mro = new MethodRerObject();
        //调用MethodRerObject 对象中的方法printUpperCase,把字符串按照大写输出
            mro.printUpperCase(s);

        });


        /*使用方法引用来优化Lambda表达式
        * 对象是已经存在的MethodRerObject
        * 成员方法也是已经存在的printUpperCase
        * 所以我们可以使用对象名来引用成员方法
        * */

        //创建MethodRerObject对象,使用对象名引用成员方法
        MethodRerObject mro = new MethodRerObject();
        printString(mro::printUpperCase);


    }
}
